package adavance.socket;

import java.io.*;
import java.net.Socket;

/**
 * @author oldliu
 * @since 1.0
 */
public class FileSendThread extends Thread {
    private Socket s;
    public FileSendThread(Socket s){
        this.s=s;
    }
    public static final String FILENAME="D:\\Documents\\图片和资料\\job-salary.png";

    @Override

    public void run() {
        File f=new File(FILENAME);
        try{
            //服务端发的信息 三部分：1文件名长度，2:文件名，3：文件内容
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            String name=f.getName();//获得文件名，不包括路径
            out.write(name.length());//不会超过255个
            out.write(name.getBytes());
            FileInputStream fin=new FileInputStream(f);
            byte b[]=new byte[fin.available()];//有隐患，大文件有问题
            int len = fin.read(b);
            //读到的文件内容，发给客户端
            out.write(b,0,len);
            out.flush();
            System.out.println("文件发送给"+s+"结束");
            //等待客户端给个反馈
            //出现io等待的情况
            s.shutdownOutput();//关闭输出流
            int reply = in.read();
            if(reply==1){
                System.out.println(s+"接受文件成功");
            }else{
                System.out.println(s+"接受文件失败");
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                s.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


    }
}
